package Thread;

/**
 * @author 逸尘风清
 * @date 2021/4/28
 * @time 14:48
 * 描述：
 */

import java.util.concurrent.Semaphore;

/**
 * 信号量
 * 用于场景： 限流，车道和收费站，购票等
 */
public class TestSemaphore {
    public static void main(String[] args) {
        // Semaphore semaphore = new Semaphore(1);    // 表示同时只能运行线程的个数
        Semaphore semaphore = new Semaphore(2,true);    // 表示同时只能运行线程的个数    第二个参数表示是否是公平锁
        new Thread(()->{
            try {
                semaphore.acquire();   // 获取锁
                System.out.println("T1 running1");
                Thread.sleep(2);
                System.out.println("T1 running2");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                semaphore.release();   // 释放锁
            }
        }).start();

        new Thread(()->{
            try {
                semaphore.acquire();   // 获取锁
                System.out.println("T2 running1");
                Thread.sleep(2);
                System.out.println("T2 running2");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                semaphore.release();   // 释放锁
            }
        }).start();
    }
}
